import sys, os
import cPickle as pickle

from model.Alumnos import Alumnos
from model.Sesion import Sesion

from sugar.activity import activity
from sugar.datastore import datastore
from GenericDao import GenericDao

class AlumnosDao(GenericDao):
    alumno = None
    Sesiones = {}

    def __init__(self):
       self.BDAlumno = 'bd.alumno'
       self.BDAlumnoLecciones = 'bd.alumnolecciones'
       self.BDDatos = 'bd.alumnodatos'
       self.BDAlumnoEncuestas = 'bd.alumnoencuestas'

    def obtener(self):
     	self.alumno = self.get_entidad('title',self.BDAlumno)
	return self.alumno

    def guardar(self, alumno):
	return self.guardarObjeto('title', self.BDAlumno, alumno)

    def borrarAlumno(self):
	return self.borrar('title', self.BDAlumno)

    def borrarAlumnoLecciones(self):
	return self.borrar('title', self.BDAlumnoLecciones)


    def existeAlumnoXo(self):
        self.alumno = self.obtener()
	if (self.alumno == None) : 
	   return False
        else:
	   if (self.alumno.getIdAlumno() == None):
	   	return False
	   else:
	   	return True


    ### - CLASES REALIZADAS DE ALUMNOS
    def obtenerListaAlumnoLecciones(self):
	self.listaClases = self.get_entidad('title',self.BDAlumnoLecciones)
	if(self.listaClases == None):
		self.listaClases = {}
	return self.listaClases


    def guardarListaAlumnoLecciones(self, listaClases):
	self.guardarObjeto('title',self.BDAlumnoLecciones, listaClases)


    def guardarAlumnoLecciones(self, idclase, idleccion):
	self.listaClases = self.obtenerListaAlumnoLecciones()
	idAlumnoLeccion = str(idclase) + '#'+ str(idleccion)
	self.listaClases[idAlumnoLeccion] = 'ok'
	self.guardarListaAlumnoLecciones(self.listaClases)


    ### - DATOS DE SESION DE ALUMNOS, COSAS QUE VAN COMPLETANDO
    def obtenerListaDatos(self):
	self.listaDatos = self.get_entidad('title',self.BDDatos)
	if(self.listaDatos == None):
		self.listaDatos = {}
	return self.listaDatos


    def guardarListaDatos(self, listaDatos):
	self.guardarObjeto('title',self.BDDatos, listaDatos)

    def obtenerDato(self, idclase, idleccion, iddato):
	self.listaDatos = self.obtenerListaDatos()
	clave = str(idclase) + '#'+ str(idleccion) + '#'+ str(iddato)
	try:
		r = self.listaDatos[clave]
		return r
	except:
		return None


    def guardarDato(self, idclase, idleccion, iddato, valor):
	self.listaDatos = self.obtenerListaDatos()
	clave = str(idclase) + '#'+ str(idleccion) + '#'+ str(iddato)
	self.listaDatos[clave] = valor
	self.guardarListaDatos(self.listaDatos)



    ### - ENCUESTAS REALIZADAS DE ALUMNOS
    def obtenerListaAlumnoEncuestas(self):
	self.listaEncuestas = self.get_entidad('title',self.BDAlumnoEncuestas)
	if(self.listaEncuestas == None):
		self.listaEncuestas = {}
	return self.listaEncuestas

    def obtenerEncuesta(self, idencuesta, identificador):
	self.listaEncuestas = self.obtenerListaAlumnoEncuestas()
	clave = str(idencuesta) + '#' + str(identificador)
	try:
	    r = self.listaEncuestas[clave]
	except:
	    r = None
	return r


    def guardarListaAlumnoEncuestas(self, listaEncuestas):
	self.guardarObjeto('title',self.BDAlumnoEncuestas, listaEncuestas)


    def guardarAlumnoEncuestas(self, idencuesta, identificador, valor):
	self.listaEncuestas = self.obtenerListaAlumnoEncuestas()
	clave = str(idencuesta) + '#' + str(identificador)
	self.listaEncuestas[clave] = valor
	self.guardarListaAlumnoEncuestas(self.listaEncuestas)



    ### - SESION
    def guardarSesion(self, laSesion):
	#Obtenemos el estudiante
	self.estudiante = self.obtenerEstudiante()
	if(self.estudiante == None):
		print "El estudiante no puede ser None. Abortar aplicacion."
		return
	
	#Modificamos la sesion y estudiante
	'''try:
		nroSesion = self.estudiante.getUltimoIdSesion() + 1
	except:
		nroSesion = 1'''
	nroSesion = self.obtenerMaxSesion() + 1
	laSesion.setIdSesion(nroSesion)
	self.estudiante.ultimoIdSesion = nroSesion

	#Guardamos la sesion y estudiante
	self.Sesiones = self.get_entidad('title','bdestudiante.listaSesiones')
	if(self.Sesiones == None):
		self.Sesiones = {}

	self.Sesiones[laSesion.getIdSesion()] = laSesion
	self.guardar('title','bdestudiante.listaSesiones', self.Sesiones)

	self.guardarEstudiante(self.estudiante)
	return laSesion


    def obtenerSesiones(self):
	self.Sesiones = self.get_entidad('title','bdestudiante.listaSesiones')
	if(self.Sesiones == None):
		self.Sesiones = {}
	return self.Sesiones

    def obtenerSesionesFaltantes(self, desde):
	self.Sesiones = self.obtenerSesiones()
	self.SesionesRet = {}
	for elem in self.Sesiones:
		tmp = int(elem)
		objeto = self.Sesiones[elem]
		if tmp >= desde :
			self.SesionesRet[objeto.getIdSesion()] = objeto
	return self.SesionesRet


    def obtenerMaxSesion(self):
	self.Sesiones = self.obtenerSesiones()
	if(self.Sesiones == None):
		return 0
        else:
		mayor = 0
		for elem in self.Sesiones:
			tmp = int(elem)
			if tmp > mayor :
				mayor = tmp
		return mayor

'''
if __name__ == '__main__':
	b = AlumnosDao('BD_ESTUDIANTE')
	b.testCrearEstudiante()
	a = b.obtenerEstudiante()
	a.imprimir()
'''

